package com.ty.xiaoyu.service;

import com.ty.xiaoyu.entity.Topic;
import com.ty.xiaoyu.entity.TopicImage;
import com.ty.xiaoyu.exception.TopicOperationException;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface TopicService {

    // 根据发布时间获取帖子列表
    List<Topic> getListByReleaseTime(Integer pageIndex, Integer pageSize) throws TopicOperationException;

    // 根据最后回复时间获取帖子列表
    List<Topic> getListByLastTime(Integer pageIndex, Integer pageSize) throws TopicOperationException;

    // 获取帖子数量
    Integer queryTopicNum();

    // 获取帖子图片
    List<TopicImage> getTopicImageList(String topicId);

    // 搜索帖子
    List<Topic> getListByCondition(Integer pageIndex,
                                   Integer pageSize,
                                   List<String> condition) throws TopicOperationException;

    // 新增帖子
    Topic addTopic(Topic topic, List<String> topicImagePathList) throws TopicOperationException;

    // 根据主贴id获取帖子详情
    Topic getTopicById(String topicId) throws TopicOperationException;

    // 根据模块id获取帖子列表
    List<Topic> getListByModuleId(@Param("rowIndex") Integer rowIndex,
                                    @Param("pageSize") Integer pageSize,
                                    @Param("moduleId") String moduleId);

    // 为了更新而搜索(行锁)
    Topic getTopicByIdForUpdate(@Param("topicId") String topicId) throws TopicOperationException;

    // 更新点赞数
    void editGreatNum(@Param("topic") Topic topic) throws TopicOperationException;

    // 更新点赞数
    void editBrowseNum(@Param("topic") Topic topic) throws TopicOperationException;

    // 根据用户id获取帖子列表
    List<Topic> getTopicListByUserId(String userId) throws TopicOperationException;

}
